/**
 * Created with IntelliJ IDEA.
 * User: dream
 * Date: 14-4-5
 * Time: 下午5:13
 * To change this template use File | Settings | File Templates.
 */
$.extend({
    checkUndefined: function (params) {
        if (params == undefined) {
            return true;
        }
        return false;
    },
    dealDefault: function (oldParams, newParams) {
        if ($.checkUndefined(oldParams)) {
            return newParams;
        }
        return oldParams;
    },
    replaceStr: function (str, searchValue, newValue) {
        return str.replace(searchValue, newValue);
    },
    simpleAjax: function (formObj, url, params) {
        $.dealDefault(params, {});
        $.ajax({
            url: url,
            data: formObj.serialize(),
            type: "POST",
            dataType: "json",
            async: true,
            beforeSend:function(XMLHttpRequest ){
                XMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            },
            success: function (data) {
//                data = $.parseJSON(data);
                if (data.success) {
                    if (!$.checkUndefined(params.tableId)) {
                        main.window.$('#' + params.tableId).refreshGrid();
                        $('#' + params.tableId).refreshGrid();
                    }
                    if (!$.checkUndefined(params.treeId)) {
                        main.window.$('#' + params.treeId).tree('reload');
                    }
                    if (!$.checkUndefined(params.onClose)) {
                        params.onClose(data.message);
                    } else {
                        formObj.parents('.parentWindow').closeWindow();
                    }
                    if ($.checkUndefined(params.success)) {
                        $.alertBox('Info', data.message, 'info');
                    } else {
                        params.success(data.message);
                    }

                } else {
                    $.alertBox('Info', data.message, 'info');
                    formObj.find('.save_button').removeAttr('disabled');
                }
            }
        })
    },
    commonAjax: function (url, data, params) {
        $.dealDefault(params, {});
        $.ajax({
            url: url,
            data: data,
            type: "POST",
            dataType: "json",
            async: true,
            beforeSend:function(XMLHttpRequest ){
                XMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            },
            success: function (data) {
                if (data.success) {
                    if ($.checkUndefined(params.success)) {
                        $.alertBox('Info', data.message, 'info');
                    } else {
                        params.success(data.message);
                    }

                } else {
                    $.alertBox('Info', data.message, 'info');
                }
            }
        })
    },
    /**
     * validate form
     */
    initFormConditions: function (obj, conditions) {
        $.each(conditions, function (name, value) {
            var element = value.element;
            if (element == undefined) {
                obj.find('[name=' + name + ']').eq(0).validatebox(value);
            } else if (element == 'datetimebox') {
                obj.find('[name=' + name + ']').eq(0).datetimebox(value);
            } else if (element == 'numberbox') {
                obj.find('[name=' + name + ']').eq(0).numberbox(value);
            } else if (element == 'combo') {
                obj.find('[name=' + name + ']').eq(0).combo(value);
            } else if (element == 'combobox') {
                obj.find('[id=' + name + ']').combobox(value);
            } else if (element == 'combotree') {
                obj.find('[name=' + name + ']').eq(0).combotree(value);
            } else if (element == 'combogrid') {
                obj.find('[name=' + name + ']').eq(0).combogrid(value);
            } else if (element == 'datebox') {
                obj.find('[name=' + name + ']').eq(0).datebox(value);
            } else if (element == 'datetimebox') {
                obj.find('[name=' + name + ']').eq(0).datetimebox(value);
            } else if (element == 'spinner') {
                obj.find('[name=' + name + ']').eq(0).spinner(value);
            } else if (element == 'numberspinner') {
                obj.find('[name=' + name + ']').eq(0).numberspinner(value);
            } else if (element == 'timespinner') {
                obj.find('[name=' + name + ']').eq(0).timespinner(value);
            } else if (element == 'slider') {
                obj.find('[name=' + name + ']').eq(0).slider(value);
            }
        });
    },
    openWindow: function (url, windowId, title, width, height) {
        parent.$.openParentWindow(url, windowId, title, width, height);
    },
    openParentWindow: function (url, windowId, title, width, height) {
        var obj = {};
        if ($("#" + windowId).length > 0) {
            obj = $("#" + windowId);
        } else {
            obj = $('<div class="parentWindow" id="' + windowId + '"></div>');
        }
        obj.window({
            title: title,
            width: width,
            height: height,
            modal: true,
            collapsible: false,
            minimizable: false,
            maximizable: false,
            href: url,
            onClose: function () {
                $(this).window('destroy');
            }
        });
        obj.window('center');
    },
    alertBox: function (title, message, type) {
        parent.$.messager.alert(title, message, type);
    },
    confirmBox: function (title, message, callback) {
        parent.$.messager.confirm(title, message, function (r) {
            callback(r);
        });
    },
    formaterDate:function(date) {
    if(date == undefined){
        date=new Date();
    }
    return date.getFullYear() + "-" + (parseInt(date.getMonth()) + 1) + "-" + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
    }
})

$.fn.extend({
    serializeObject: function () {
        var obj = new Object();
        $.each($(this).serializeArray(), function (index, param) {
            if (!(param.name in obj)) {
                obj[param.name] = param.value;
            }
        });
        return obj;
    },
    refreshGrid: function () {
        $(this).datagrid('reload');
    },
    reloadGrid: function (data) {
        $(this).datagrid('load',data);
    },
    clearSelect: function () {
        $(this).datagrid('clearSelections');
        //取消选择DataGrid中的全选
        $("input[type='checkbox']").eq(0).attr("checked", false);
    },
    getSelectIds: function () {
        var rows = $(this).datagrid('getSelections');
        var num = rows.length;
        var ids = null;
        if (num < 1) {
            return null;
        } else {
            for (var i = 0; i < num; i++) {
                if (null == ids || i == 0) {
                    ids = rows[i].id;
                } else {
                    ids = ids + "," + rows[i].id;
                }
            }
            return ids;
        }
    },
    doEdit: function (params) {
        $.dealDefault(params, {});
        var obj = $(this);
        var row = obj.datagrid('getSelected');
        var rows = obj.datagrid('getSelections');
        var num = rows.length;
        if (num < 1) {
            $.alertBox('提示消息', '请选择一条记录！', 'info');
        } else if (num == 1) {
            params.callback(row);
        } else if (num > 1) {
            $.alertBox('提示消息', '请选择一条记录！', 'info');
        }
    },
    doDelete: function (params) {
        $.dealDefault(params, {});
        var obj = $(this);
        var ids = obj.getSelectIds();
        if (ids == null) {
            var noOneSelectMessage = '请至少选择一条记录';
            $.alertBox('提示消息', noOneSelectMessage, 'info');
            return false;
        }
        $.confirmBox('确认', '确定删除所选记录?', function (r) {
            if (r) {
                if ($.checkUndefined(params.success)) {
                    function success(data) {
                        $.alertBox('系统提示', data, 'info');
                        obj.refreshGrid();
                        obj.clearSelect();
                        if (!$.checkUndefined(params.treeId)) {
                            $('#' + params.treeId).tree('reload');
                        }
                    };
                    $.commonAjax(params.url, {ids: ids}, {success: success});
                } else {
                    $.commonAjax(params.url, {ids: ids}, {success: params.success(data)});
                }
            }
        })
    },
    closeWindow: function () {
        $(this).window('close');
    },
    reset: function () {
        $(this).find('input[type!=hidden]').val(null);
    },
    initSearchBox: function (tableObj) {
        var searchBoxObj = $(this);
        searchBoxObj.closest('div').css('display', 'block');
        var searchBoxMenuObj = searchBoxObj.closest('div').find('.default_search_menu');
        searchBoxObj.searchbox({
            searcher: function (value, name) {
                tableObj.datagrid('load', {
                    search_type: '0',
                    param: name,
                    value: value
                });
            },
            menu: searchBoxMenuObj,
            prompt: '请输入要查询的内容'
        });
    },
    //提供最小化的和自定义的grid配置
    initGrid: function (params) {
        var obj = $(this);
        var url = params.url;
        var pagination = $.dealDefault(params.pagination, true);
        var rownumbers = $.dealDefault(params.rownumbers, true);
        var queryParams = $.dealDefault(params.queryParams, {});
        var columns = $.dealDefault(params.columns, []);
        var toolbar = $.dealDefault(params.toolbar, []);
        var title = $.dealDefault(params.title, '');
        var pageSize = $.dealDefault(params.pageSize, 20);
//        var width = $.dealDefault(params.width, 'auto');
//        var height = $.dealDefault(params.height, 400);
        var singleSelect = $.dealDefault(params.singleSelect, false);
        var pageNumber = $.dealDefault(params.pageNumber, 1);
        var pageList = $.dealDefault(params.pageList, [10, 15, 20, 30, 40, 50]);
        var fitColumns = $.dealDefault(params.fitColumns, true);
        var fit = $.dealDefault(params.fit, true);
        var border = $.dealDefault(params.border, false);
        obj.datagrid({
            url: url,//一个用以从远程站点请求数据的超链接地址。
            title: title,
            pagination: pagination, //设置true将在数据表格底部显示分页工具栏。false
            rownumbers: rownumbers,  //设置为true将显示行数。   false
            pageSize: pageSize, //当设置分页属性时，初始化每页记录数。10
//            width: width,
//            height: height,
            fit: fit,
            border: border,
            showHeader: true,
            singleSelect: singleSelect,//设置为true将只允许选择一行。false
            pageNumber: pageNumber,//当设置分页属性时，初始化分页码。1
            pageList: pageList,//  当设置分页属性时，初始化每页记录数列表。[10,20,30,40,50]
            fitColumns: fitColumns,//设置为true将自动使列适应表格宽度以防止出现水平滚动。 false
            striped: true,//设置为true将交替显示行背景。false
            method: 'get',//请求远程数据的方法类型。post
            nowrap: true,  //设置为true，当数据长度超出列宽时将会自动截取。true
            idField: 'id', //表明该列是一个唯一列
            loadMsg: "正在处理你的请求，请稍等。。。",//当从远程站点载入数据时，显示的一条快捷信息 Processing, please wait …
            sortName: 'id',  //  当数据表格初始化时以哪一列来排序 null
            sortOrder: 'asc',// 定义排序顺序，可以是'asc'或者'desc'（正序或者倒序）。asc
            remoteSort: 'true',//定义是否通过远程服务器对数据排序。true
            showFooter: true,// 定义是否显示行底（如果是做统计表格，这里可以显示总计等）false
            rowStyler: function (index, row) {
                if (!$.checkUndefined(params.rowStyler)) {
                    params.rowStyler(index, row);
                }
                //返回样式，如：'background:red'，function有2个参数：index：行索引，从0开始.row：对应于该行记录的对象。
            },
            loadFilter: function (data) {
                if (!$.checkUndefined(params.loadFilter)) {
                    params.loadFilter(data);
                }
                return data;
                //返回用以显示的已过滤数据，function有一个参数'data'表示原始数据，你可以将原始数据改变为规范的数据格式，该函数必须返回包含 'total'和'rows'属性的标准数据对象。
            },
            queryParams: queryParams,
            columns: columns,
            toolbar: toolbar,
            onCheck: function (rowIndex, rowData) {
                if (!$.checkUndefined(params.onCheck)) {
                    params.onCheck(rowIndex, rowData);
                }
            },
            onUncheck: function (rowIndex, rowData) {
                if (!$.checkUndefined(params.onUncheck)) {
                    params.onUncheck(rowIndex, rowData);
                }
            },
            onLoadSuccess: function (data) {
                var rows = obj.datagrid('getPanel').find('tr[datagrid-row-index]');
                rows.unbind('click').bind('click', function (e) {
                    return false;
                });
                rows.find('div.datagrid-cell-check input[type=checkbox]').unbind().bind('click', function (e) {
                    var index = $(this).parent().parent().parent().attr('datagrid-row-index');
                    if ($(this).attr('checked')) {
                        obj.datagrid('selectRow', index);
                    } else {
                        obj.datagrid('unselectRow', index);
                    }
                    e.stopPropagation();
                });
                obj.datagrid('unselectAll');

                if (!$.checkUndefined(params.onLoadSuccess)) {
                    params.onLoadSuccess(data);
                }

            }
        });
        var pager = obj.datagrid('getPager');	// get the pager of datagrid
        pager.pagination();
    },
    initTree: function (params) {
        var obj = $(this);
        obj.tree({
            onlyLeafCheck: $.dealDefault(params.onlyLeafCheck, false),
            url: obj.attr('url'),
            animate: true,
            onLoadSuccess: function (node, data) {
            },
            onContextMenu: function (e,node) {
                e.preventDefault();
                if (!$.checkUndefined(params.onContextMenu)) {
                    params.onContextMenu(e,node);
                }

            },
            onClick: function (node) {
                if (!$.checkUndefined(params.onClick)) {
                    params.onClick(node);
                }
            }
        });
    },
//    initTree: function (params) {
//        //init some valible
//        var hasMenuItemCopy = false;
//        var hasMenuItemCut = false;
//        var hasMenuItemPaste = false;
//        //end init
//        var obj = $(this);
//        var treeMenuId = obj.attr('treeMenuId');
//        var treeMenuObj = $('#' + treeMenuId);
//        params = $.dealDefault(params, {});
////        $.each(params,function(name,value) {
////            alert(name);
////            alert(value);
////        });
//        var origAddItem;
//        var origEditItem;
//        var origRemoveItem;
//        var origCutItem;
//        var origPasteItem;
//        var origAddItemOptions;
//        var origEditItemOptions;
//        var origRemoveItemOptions;
//        var origCutItemOptions;
//        var origPasteItemOptions;
//        if (!$.checkUndefined(params.add)) {
//            origAddItem = $.dealDefault(params.add.text, '添加节点');
//            origAddItemOptions = {
//                text: origAddItem,
//                iconCls: $.dealDefault(params.add.iconCls, 'icon-add'),
//                onclick: function (node, data) {
//                    var node = obj.tree('getSelected');
//                    $.dealDefault(params.add.handle(node), function () {
//                    });
//                }
//            };
//            treeMenuObj.menu('appendItem', origAddItemOptions);
//        }
//        if (!$.checkUndefined(params.edit)) {
//            origEditItem = $.dealDefault(params.edit.text, '编辑节点');
//            origEditItemOptions = {
//                text: origEditItem,
//                iconCls: $.dealDefault(params.edit.iconCls, 'icon-edit'),
//                onclick: function (node, data) {
//                    var node = obj.tree('getSelected');
//                    if (node.id == 0) {
//                        $.alertBox('系统提示', '顶层节点不允许编辑', 'info');
//                    } else {
//                        $.dealDefault(params.edit.handle(node), function () {
//                        });
//                    }
//                }
//            };
//            treeMenuObj.menu('appendItem', origEditItemOptions);
//        }
//        if (!$.checkUndefined(params.remove)) {
//            origRemoveItem = $.dealDefault(params.remove.text, '删除节点');
//            origRemoveItemOptions = {
//                text: origRemoveItem,
//                iconCls: $.dealDefault(params.remove.iconCls, 'icon-remove'),
//                onclick: function (node, data) {
//                    var node = obj.tree('getSelected');
//                    $.dealDefault(params.remove.handle(node), function () {
//                    });
//                }
//            };
//            treeMenuObj.menu('appendItem', origRemoveItemOptions);
//        }
//
//        var addItem = treeMenuObj.menu('findItem', origAddItem);
//        var editItem = treeMenuObj.menu('findItem', origEditItem);
//        var removeItem = treeMenuObj.menu('findItem', origRemoveItem);
//        obj.tree({
//            onlyLeafCheck: $.dealDefault(params.onlyLeafCheck, false),
//            url: obj.attr('url'),
//            animate: true,
//            onLoadSuccess: function (node, data) {
//                var node1 = obj.tree('find', '0');
//                obj.tree('select', node1.target);
//            },
//            onContextMenu: function (e, node) {
//                e.preventDefault();
//                if (!$.checkUndefined(params.onBeforeContextMenu)) {
//                    params.onBeforeContextMenu(node, params);
//                    //remove all
//                    treeMenuObj.menu('removeItem', addItem.target);
//                    treeMenuObj.menu('removeItem', editItem.target);
//                    treeMenuObj.menu('removeItem', removeItem.target);
//                    //append all
//                    treeMenuObj.menu('appendItem', origAddItemOptions);
//                    treeMenuObj.menu('appendItem', origEditItemOptions);
//                    treeMenuObj.menu('appendItem', origRemoveItemOptions);
//
//                    addItem = treeMenuObj.menu('findItem', origAddItem);
//                    editItem = treeMenuObj.menu('findItem', origEditItem);
//                    removeItem = treeMenuObj.menu('findItem', origRemoveItem);
//                    if (params.add.text == '') {
//                        treeMenuObj.menu('removeItem', addItem.target);
//                    } else {
//                        if (addItem.text != params.add.text) {
//                            treeMenuObj.menu('setText', {
//                                target: addItem.target,
//                                text: params.add.text
//                            });
//                        }
//                    }
//                    if (params.edit.text == '') {
//                        treeMenuObj.menu('removeItem', editItem.target);
//                    } else {
//                        if (editItem.text != params.edit.text) {
//                            treeMenuObj.menu('setText', {
//                                target: editItem.target,
//                                text: params.edit.text
//                            });
//                        }
//                    }
//
//                    if (params.remove.text == '') {
//                        treeMenuObj.menu('removeItem', removeItem.target);
//                    } else {
//                        if (removeItem.text != params.remove.text) {
//                            treeMenuObj.menu('setText', {
//                                target: removeItem.target,
//                                text: params.remove.text
//                            });
//                        }
//                    }
//                }
//
//                /*    //处理复制节点
//                 if(!$.checkUndefined(params.copy)){
//                 if(!hasMenuItemCopy){
//                 params.copy = $.dealDefault(params.copy, {});
//                 treeMenuObj.menu('appendItem', {
//                 text: $.dealDefault(params.copy.text,'复制'),
//                 iconCls: $.dealDefault(params.copy.iconCls, ''),
//                 onclick: function (node, data) {
//                 var node = obj.tree('getSelected');
//                 $.dealDefault(params.copy.handle(node), function () {
//                 });
//                 }
//                 });
//                 hasMenuItemCopy=true;
//                 }
//                 }
//                 //处理剪切节点
//                 if(!$.checkUndefined(params.cut)){
//                 var item = treeMenuObj.menu('findItem', params.cut.text);
//                 alert(JSON.stringify(item));
//                 params.cut = $.dealDefault(params.cut, {});
//                 treeMenuObj.menu('appendItem', {
//                 text: $.dealDefault(params.cut.text,'剪切'),
//                 iconCls: $.dealDefault(params.cut.iconCls, ''),
//                 onclick: function (node, data) {
//                 var node = obj.tree('getSelected');
//                 $.dealDefault(params.cut.handle(node), function () {
//                 });
//                 }
//                 });
//                 }
//                 //处理粘贴节点
//                 if(!$.checkUndefined(params.paste)){
//                 params.paste = $.dealDefault(params.paste, {});
//                 treeMenuObj.menu('appendItem', {
//                 text: $.dealDefault(params.paste.text,'粘贴'),
//                 iconCls: $.dealDefault(params.paste.iconCls, ''),
//                 onclick: function (node, data) {
//                 var node = obj.tree('getSelected');
//                 $.dealDefault(params.paste.handle(node), function () {
//                 });
//                 }
//                 });
//                 }*/
//                $(this).tree('select', node.target);
//                treeMenuObj.menu('show', {
//                    left: e.pageX,
//                    top: e.pageY
//                });
//            },
//            onClick: function (node) {
//                if (!$.checkUndefined(params.onClick)) {
//                    params.onClick(node);
//                }
//            }
//        });
//    },
    getSelectNodeId: function () {
        var obj = $(this);
        var node = obj.tree('getSelected');
        if (node == null) {
            return null;
        }
        return node.id;
    },
    getSelectNode: function () {
        var obj = $(this);
        var node = obj.tree('getSelected');
        if (node == null) {
            return null;
        }
        return node;
    },
    doDeleteNode: function (params) {
        $.dealDefault(params, {});
        var obj = $(this);
        var node = obj.tree('getSelected');
        var parentNode = obj.tree('getParent', node.target);
        var msg1 = $.dealDefault("要删除的节点是父节点，如果删除将连同子节点一起删掉。\n\n请确认！", params.msg1);
        var msg2 = $.dealDefault("如果删除将连同相关信息一起删掉。\n\n请确认！", params.msg2);
        var msg = '顶层节点不允许删除！';
        var isLeaf = obj.tree('isLeaf', node.target);
        if (!isLeaf) {
            msg = msg1;
        } else {
            msg = msg2;
        }
        var nodeId = node.id;
        if (!$.checkUndefined(params.suffix)) {
            nodeId = $.replaceStr(nodeId, params.suffix, '');
        }
        $.confirmBox('确认', msg, function (r) {
            if (r) {
                if ($.checkUndefined(params.success)) {
                    function success(data) {
                        $.alertBox('系统提示', data, 'info');
                        obj.tree('reload');
                        if (!$.checkUndefined(params.tableId)) {
                            $('#' + params.tableId).refreshGrid();
                        }
                    };
                    $.commonAjax(params.url, {ids: nodeId}, {success: success});
                } else {
                    $.commonAjax(params.url, {ids: nodeId}, {success: params.success(data)});
                }
            }
        })
    },
    initPage: function (params) {
        if ($.checkUndefined(params)) {
            params = {};
        }
        $(this).load(params.url, function () {
            if (!$.checkUndefined(params.callback)) {
                params.callback();
            }
        })
    }
})

$(function () {
    $('body').on('click', '.advance_search_form_show', function () {
        var url = $(this).attr('url');
        var windowId = $(this).attr('windowId');
        $.openWindow(url, windowId, '高级查询', 600, 400);
        return false;
    });

    $('body').on('click', '.advance_search_link', function () {
        var tableId = $(this).parents('form').attr('tableId');
        var formObj = $(this).parents('form');
        main.window.$('#' + tableId).datagrid('load', formObj.serializeObject());
        return false;
    });

    $('body').on('click', '.openLinkManyWindow', function (event) {
        var windowId = $(this).attr('windowId');
        var url = $(this).attr('url');
        $.openWindow(url, windowId, '选择框', 600, 350);
        event.stopPropagation();
        return false;
    });
})
